Se le pidió a un grupo de 100 clientes que compraron el mismo producto o productos similares en la tienda de Amazon, que evaluaran el servicio recibido desde diferentes aspectos. El archivo EjemploAlgoritmosRecomendacion.csv muestra los promedios de la evaluación dada por los clientes en relación a las variables que se pueden apreciar en el encabezado de la tabla. Para este dataset, realice lo siguiente:
algoritmos_recomendacion <- read.csv("ejemplo_algoritmos_recomendacion.csv", sep = ";", dec = ",", header = T,row.names = 1)
algoritmos_recomendacion
NA
vis_dat(algoritmos_recomendacion)
Como se aprecia en el gráfico anterior, en el dataset, todos los datos son de tipo númerico y no hay valores nulos dentro de la información. Además las variables presentes en el dataset son las siguientes: Velocidad de entrega, precio, durabilidad, imagen producto, valor educativo, servicio retorno, tamaño paquete, calidad producto y número de estrellas.
c <- round(cor(algoritmos_recomendacion), 2)
corrplot(c)
Se puede apreciar que existe una correlación positiva fuerte entre las siguientes variables:
También se puede ver que existe una correlación negativa fuerte entre:
pca_amazon <- PCA(algoritmos_recomendacion, scale.unit=TRUE, ncp=5, graph = FALSE)
plot(pca_amazon, axes=c(1, 2), choix="ind", col.ind="red",new.plot=TRUE)
plot(pca_amazon, axes=c(1, 2), choix="var", col.var="blue",new.plot=TRUE)
fviz_pca_biplot(pca_amazon, repel = FALSE,
col.var = "#2E9FDF", # Variables color
col.ind = "#696969" # Individuals color
)
Al realizar el círculo de correlaciones se aprecian los mismo resultados que se obtuvieron en la sección C.
pca_amazon.hcpc <- HCPC(pca_amazon, nb.clust=-1, min=2, max=3)
Se puede ver que a grades rasgos existen 2 clústeres (Es lo que la función anterior sugiere). El clúster 1 parece tender a la variable “Tamaño Paquete” mientras que el clúster 2 a “Durabilidad”. Nótese que se pueden especificar más clústeres si se deseara. E.g. 3 clústeres.
pca_amazon.hcpc <- HCPC(pca_amazon, nb.clust=3, min=2, max=3)
cos2_ind <- (pca_amazon$ind$cos2[,1] + pca_amazon$ind$cos2[,2])
cos2_ind
Adam Anna Bernard Edward Emilia Fabian Philip Frank Xavier
0.55146960 0.74416168 0.66040342 0.63180497 0.71816555 0.45408677 0.58722302 0.58010199 0.69566981
Gabriel Marisol Henry Irene Isabelle Isidore Joseph Eugene Eugenia
0.82560843 0.54819961 0.11569585 0.91278931 0.01262467 0.65679771 0.67832572 0.36678098 0.35198240
Eunice Eva Evdokia Fedir Felix Fialka Flavia Flora Florent
0.74322200 0.67167923 0.96010202 0.95451021 0.73471903 0.88471297 0.74031145 0.64285172 0.88046658
Florence Hannah Helen Herman Hilary Lourdes Isadore Ivan Jacob
0.70968393 0.47084804 0.61788267 0.65860749 0.66203175 0.91529171 0.69287286 0.94695684 0.82260793
Jeremiah Jervis Joachim John Santiago Josephine Judith Justin Kalyna
0.64508404 0.38536779 0.79572503 0.91543082 0.77879172 0.71106364 0.56816646 0.73249315 0.84870929
Larissa Lawrence Leon Leonard Leonid Lesia Leo Louise Lubomyr
0.57507766 0.43650815 0.58953331 0.68423683 0.36960213 0.32667100 0.36794715 0.77857765 0.82560730
Lydia Magdalyna Maksym Marcel Margaret Maria Marian Marianna Markian
0.91194804 0.47874818 0.93172414 0.84840458 0.43494804 0.24534428 0.44278161 0.89383453 0.36835389
Marko Martha Martin Maryna Matthew Maura Maya Maximillian Melania
0.36169774 0.69424135 0.81330948 0.80603214 0.57488340 0.59312759 0.30161325 0.72408013 0.34676297
Methodius Michael Michaelina Mina Monica Mykyta Myron Myroslav Myroslava
0.65616510 0.65367205 0.52709522 0.24566179 0.28583026 0.53832858 0.72972284 0.69287260 0.63195389
Salome Samuel Sandra Sarah Savina Sebastian Sophia Stephan Stephania
0.78699090 0.73885253 0.60739183 0.31844744 0.66295845 0.16038875 0.69378643 0.53241763 0.82140355
Susanna Sylvan Sylvester Tamara Theodore Teofan Teofil Teofila Teon
0.59612138 0.37431726 0.64600722 0.91479710 0.63831774 0.88227742 0.69857490 0.91327675 0.54270039
Teresa
0.38328345
malrep <- NULL
# Seguidamente se seleccionan las entradas que cumplen la restricción, es decir, lo mal representados
for (i in 1 : nrow(algoritmos_recomendacion)) {
header <- names(cos2_ind)[i]
ifelse(cos2_ind[i] <= 0.2, malrep <- cbind(matrix(c(header, cos2_ind[i]), 2, 1, TRUE), malrep), NA)
}
malrep
[,1] [,2] [,3]
[1,] "Sebastian" "Isabelle" "Henry"
[2,] "0.160388753998423" "0.0126246707441691" "0.115695849549973"
Se puede ver que Sebastian, Isabelle y Henry están mal representados en este set de datos.
cos2_var <- (pca_amazon$var$cos2[,1] + pca_amazon$var$cos2[,2])
cos2_var
Velocidad.Entrega Precio Durabilidad Imagen.Producto Valor.Educativo Servicio.Retorno
0.7977364 0.6356452 0.6812899 0.6366073 0.6900909 0.5265128
Tamano.Paquete Calidad.Producto Numero.Estrellas
0.5719167 0.8209417 0.7744783
var_malrep <- NULL #crea un vector
# Seguidamente se seleccionan las entradas que cumplen la restricción, es decir, lo mal representados
for (i in 1 : nrow(algoritmos_recomendacion)) {
header <- names(cos2_var)[i]
ifelse(cos2_var [i] <= 0.55, var_malrep <- cbind(matrix(c(header, cos2_var[i]), 2, 1, TRUE), var_malrep), NA)
}
var_malrep
[,1]
[1,] "Servicio.Retorno"
[2,] "0.526512849488411"
Según el resultado, solo la variable “Servicio Retorno” no cumple con los requisitos mínimos.
modelo <- hclust(dist(algoritmos_recomendacion),method= "ward.D")
#modelo
centros<-centers.hclust(algoritmos_recomendacion,modelo,nclust=3,use.median=FALSE)
#centros
rownames(centros)<-c("Cluster 1","Cluster 2","Cluster 3")
centros<-as.data.frame(centros)
centros2<-as.data.frame(centros)
maximos<-apply(centros,2,max)
minimos<-apply(centros,2,min)
centros<-rbind(minimos,centros)
centros<-rbind(maximos,centros)
centros
radarchart(centros,maxmin=TRUE,axistype=4,axislabcol="slategray4",
centerzero=FALSE,seg=8,cglcol="gray67",
pcol=c("blue","red","green"),
plty=1,
plwd=5,
title="Comparación de clústeres")
legenda <-legend(1.5,1, legend=c("Cluster 1","Cluster 2","Cluster 3"),
seg.len=-1.4,
title="Clústeres",
pch=21,
bty="n" ,lwd=3, y.intersp=1, horiz=FALSE,
col=c("blue","red","green"))
Se puede que los individuos del clúster 1 calificaron más alto el Precio y Tamaño de Paquete, los miembros del clúster 2 concordaron que el servicio fue mejor con respecto al precio, número de estrellas, calidad del producto, tamaño del paquete, servicio de retorno, valor educativo e imagen del producto. Por último lo miembros del clúster 3 percibieron el servicio recibido como positivo en los aspectos de durabilidad, Velocidad de entrega, número de estrellas, calidad del producto y valor educativo.
Partiendo del hecho de que todos los individuos compraron, ya sea el mismo producto o similares, pero, cada uno tuvo una experiencia de compra diferente que pudo ser mejor o peor en los diferentes rubros de la evaluación.
fviz_pca_biplot(pca_amazon, repel = FALSE,
col.var = "#2E9FDF", # Variables color
col.ind = "#696969" # Individuals color
)
Tomando en cuenta el gráfico anterior, en el cual se superpusieron el plano principal y el círculo de correlaciones, a Salome se le pueden recomendar productos con una puntuación alta en Imagen Producto y Precio, a Stephania productos con un alto Valor Educativo y a Lydia no podríamos saber que recomendarle puesto que esta muy alejada de cualquier variable.
Considérese tabla datos ConsumoEuropa.csv que contiene una estimación del consumo promedio de proteínas, en gramos, por persona y por día, en Europa, datos del año 1981 (Está en el aula virtual con el nombre).
consumo_europa <- read.csv("consumo_europa.csv", sep = ";", dec = ",", header = T,row.names = 1)
pca_europa<- PCA(consumo_europa, scale.unit=TRUE, ncp=5, graph = FALSE)
pca_europa$var
$coord
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
CarneAnimal 0.6103512 -0.07959861 0.604598358 0.3252356 0.02547500
CarneCerdo 0.6561937 -0.30272199 -0.587241060 0.2325802 -0.19878516
Huevos 0.8683846 -0.04608760 -0.005096851 0.3099642 0.03816592
Leche 0.6919076 -0.33712557 0.302820404 0.0222087 0.20878439
CarnePescado 0.2303011 0.85589466 0.202885747 -0.2979579 -0.18578716
Cereales -0.8607292 -0.32678534 -0.110929934 0.0759775 0.21287360
Almidon 0.5974899 0.46549920 -0.339904098 -0.1699131 0.50869008
Semillas -0.8297185 0.13586043 0.193878778 0.3193514 0.17632219
Frutas -0.1960221 0.62892592 -0.168233601 0.6894679 -0.02889873
$cor
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
CarneAnimal 0.6103512 -0.07959861 0.604598358 0.3252356 0.02547500
CarneCerdo 0.6561937 -0.30272199 -0.587241060 0.2325802 -0.19878516
Huevos 0.8683846 -0.04608760 -0.005096851 0.3099642 0.03816592
Leche 0.6919076 -0.33712557 0.302820404 0.0222087 0.20878439
CarnePescado 0.2303011 0.85589466 0.202885747 -0.2979579 -0.18578716
Cereales -0.8607292 -0.32678534 -0.110929934 0.0759775 0.21287360
Almidon 0.5974899 0.46549920 -0.339904098 -0.1699131 0.50869008
Semillas -0.8297185 0.13586043 0.193878778 0.3193514 0.17632219
Frutas -0.1960221 0.62892592 -0.168233601 0.6894679 -0.02889873
$cos2
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
CarneAnimal 0.37252854 0.006335939 3.655392e-01 0.1057781815 0.0006489754
CarneCerdo 0.43059019 0.091640606 3.448521e-01 0.0540935716 0.0395155400
Huevos 0.75409185 0.002124067 2.597789e-05 0.0960778220 0.0014566371
Leche 0.47873607 0.113653648 9.170020e-02 0.0004932262 0.0435909200
CarnePescado 0.05303858 0.732555674 4.116263e-02 0.0887789165 0.0345168681
Cereales 0.74085471 0.106788657 1.230545e-02 0.0057725806 0.0453151701
Almidon 0.35699416 0.216689501 1.155348e-01 0.0288704695 0.2587655951
Semillas 0.68843272 0.018458057 3.758898e-02 0.1019853039 0.0310895146
Frutas 0.03842468 0.395547814 2.830254e-02 0.4753659282 0.0008351364
$contrib
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
CarneAnimal 9.5185975 0.3762894 35.249277907 11.05060734 0.1424021
CarneCerdo 11.0021495 5.4425071 33.254400739 5.65113534 8.6707397
Huevos 19.2680453 0.1261477 0.002505071 10.03721438 0.3196242
Leche 12.2323404 6.7498548 8.842734093 0.05152716 9.5649844
CarnePescado 1.3552059 43.5062538 3.969349808 9.27470043 7.5739008
Cereales 18.9298189 6.3421451 1.186625849 0.60305935 9.9433298
Almidon 9.1216734 12.8691221 11.141126308 3.01608723 56.7799182
Semillas 17.5903676 1.0962183 3.624739889 10.65436682 6.8218501
Frutas 0.9818014 23.4914617 2.729240336 49.66130196 0.1832507
plot(pca_europa, axes=c(1, 2), choix="ind", col.ind="red",new.plot=TRUE)
plot(pca_europa, axes=c(1, 2), choix="var", col.var="blue",new.plot=TRUE)
Considere que podría recortar alguno de estos gráficos, hacer rotaciones y si es necesario buscar un mapa de Europa, de preferencia un mapa político.
Según el plano principal, el círculo de correlaciones y el mapa de europa, se puede apreciar que la mayoría de europa obtiene su fuente de proteínas de carne animal, huevos, carne de cerdo, leche y cereales. Pero España y Portugal tienen al pescado y las frutas como fuente principal.
Autor Brian Duran